home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Controls / Visual Basic Controls.iso / vbcontrol / intmail2 / timemain.pas < prev    next >
Pascal/Delphi Source File  |  1999-07-26  |  4KB  |  151 lines

  1. unit TimeMain;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   Mssocket, Buttons, StdCtrls, ExtCtrls, ComCtrls;
  8.  
  9. type
  10.   TTimeForm = class(TForm)
  11.     msClientSocket1: TmsClientSocket;
  12.     Panel1: TPanel;
  13.     Label1: TLabel;
  14.     ServerComboBox: TComboBox;
  15.     ConnectButton: TSpeedButton;
  16.     CancelButton: TSpeedButton;
  17.     PaintBox1: TPaintBox;
  18.     StatusBar: TStatusBar;
  19.     Label2: TLabel;
  20.     Label3: TLabel;
  21.     procedure FormCreate(Sender: TObject);
  22.     procedure ConnectButtonClick(Sender: TObject);
  23.     procedure msClientSocket1Connecting(Sender: TObject);
  24.     procedure msClientSocket1Connected(Sender: TObject);
  25.     procedure msClientSocket1Disconnected(Sender: TObject);
  26.     procedure CancelButtonClick(Sender: TObject);
  27.   private
  28.     { Private declarations }
  29.     function NetTimeToDateTime(NetTime: LongInt): TDateTime;
  30.     procedure DrawClock(DT: TDateTime);
  31.   public
  32.     { Public declarations }
  33.   end;
  34.  
  35. var
  36.   TimeForm: TTimeForm;
  37.  
  38. implementation
  39.  
  40. {$R *.DFM}
  41.  
  42. const
  43.   SecsInDay = 86400;
  44.   Shift = 2;
  45.  
  46. function TTimeForm.NetTimeToDateTime(NetTime : LongInt) : TDateTime;
  47. var
  48.   i : Integer;
  49.   r : Double;
  50. begin
  51.   r:=0;
  52.   for i:=0 to 3 do
  53.     r:=r*256+((NetTime shr (8*i)) and $000000FF);
  54.   Result:=r/SecsInDay+Shift;
  55. end;
  56.  
  57. procedure TTimeForm.FormCreate(Sender: TObject);
  58. begin
  59.   ServerComboBox.ItemIndex:=0;
  60. end;
  61.  
  62. procedure TTimeForm.DrawClock(DT : TDateTime);
  63. var
  64.   Hour, Min, Sec, MSec : word;
  65.   r : Integer;
  66.   Angle : real;
  67. begin
  68.   DecodeTime(DT,Hour,Min,Sec,MSec);
  69.   if Hour>12 then Hour:=Hour-12;
  70.   with PaintBox1 do
  71.   begin
  72.     Canvas.Brush.Color:=clBtnFace;
  73.     Canvas.Pen.Color:=clBlue;
  74.     Canvas.Pen.Width:=2;
  75.     Canvas.Ellipse(2,2,Width-2,Height-2);
  76.     Canvas.Pen.Width:=4;
  77.     Canvas.Pen.Color:=clRed;
  78.     Canvas.MoveTo(Width div 2, Height div 2);
  79.     r:=(Width div 2)-15;
  80.     Angle:=pi*Hour/6+2*pi*Min/12/60;
  81.     Canvas.LineTo(Width div 2+Round(r*Sin(Angle)),Width div 2-Round(r*Cos(Angle)));
  82.     Canvas.MoveTo(Width div 2, Height div 2);
  83.     r:=(Width div 2)-4;
  84.     Angle:=pi*Min/30;
  85.     Canvas.LineTo(Width div 2+Round(r*Sin(Angle)),Width div 2-Round(r*Cos(Angle)));
  86.     Canvas.MoveTo(Width div 2, Height div 2);
  87.     r:=(Width div 2)-4;
  88.     Angle:=pi*Sec/30;
  89.     Canvas.Pen.Color:=clGreen;
  90.     Canvas.Pen.Width:=1;
  91.     Canvas.LineTo(Width div 2+Round(r*Sin(Angle)),Width div 2-Round(r*Cos(Angle)));
  92.   end;
  93. end;
  94.  
  95. procedure TTimeForm.ConnectButtonClick(Sender: TObject);
  96. var
  97.   TempStream: TStream;
  98.   NetTime: Longint;
  99.   DT: TDateTime;
  100.   rc: Integer;
  101. begin
  102.   ServerComboBox.Enabled:=false;
  103.   ConnectButton.Enabled:=false;
  104.   CancelButton.Enabled:=true;
  105.   try
  106.     msClientSocket1.Host:=ServerComboBox.Text;
  107.     msClientSocket1.Connect;
  108.     TempStream:=TMemoryStream.Create;
  109.     try
  110.       msClientSocket1.RecvStream(TempStream,4,0);
  111.       TempStream.Position:=0;
  112.       rc:=TempStream.Read(NetTime,4);
  113.       if rc<>4 then
  114.         raise Exception.Create('Error receiving data');
  115.       DT:=NetTimeToDateTime(NetTime);
  116.       Label2.Caption:=FormatDateTime('ddd, mmm dd yyyy',DT);
  117.       Label3.Caption:=FormatDateTime('hh:mm:ss "UTC"',DT);
  118.       DrawClock(DT);
  119.     finally
  120.       TempStream.Free;
  121.     end;
  122.     msClientSocket1.Disconnect;
  123.   finally
  124.     ServerComboBox.Enabled:=true;
  125.     ConnectButton.Enabled:=true;
  126.     CancelButton.Enabled:=false;
  127.   end;
  128. end;
  129.  
  130. procedure TTimeForm.msClientSocket1Connecting(Sender: TObject);
  131. begin
  132.   StatusBar.SimpleText:='Connecting to '+msClientSocket1.Host;
  133. end;
  134.  
  135. procedure TTimeForm.msClientSocket1Connected(Sender: TObject);
  136. begin
  137.   StatusBar.SimpleText:='Connected';
  138. end;
  139.  
  140. procedure TTimeForm.msClientSocket1Disconnected(Sender: TObject);
  141. begin
  142.   StatusBar.SimpleText:='Disconnected';
  143. end;
  144.  
  145. procedure TTimeForm.CancelButtonClick(Sender: TObject);
  146. begin
  147.   msClientSocket1.Cancel;
  148. end;
  149.  
  150. end.
  151.